package com.star.star.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.star.star.vo.StarDetailWxmentorVO;
import com.star.star.dto.*;
import com.star.star.entity.Star;
import com.baomidou.mybatisplus.extension.service.IService;
import com.star.star.vo.*;

import java.math.BigDecimal;
import java.util.List;

/**
 * 艺人 服务类
 *
 * @author yangzj
 */
public interface StarService extends IService<Star> {

    /**
     * 更新启用
     *
     * @param id      ID
     * @param enabled 启用
     */
    void updateEnabled(Long id, boolean enabled);

    /**
     * 更新签约
     *
     * @param id        ID
     * @param isSigning 是否签字
     */
    void updateSigning(Long id, boolean isSigning);

    /**
     * 更新分数
     *
     * @param id    ID
     * @param score 分数
     */
    void updateScore(Long id, BigDecimal score);

    /**
     * 分页
     *
     * @param dto 入参
     * @return {@link IPage}<{@link StarPageVO}>
     */
    IPage<StarPageVO> page(StarPageDTO dto);

    /**
     * 获取详情
     *
     * @param id ID
     * @return {@link StarDetailVO}
     */
    StarDetailVO getDetail(Long id);

    /**
     * 分页审核
     *
     * @param dto 入参
     * @return {@link IPage}<{@link StarFileAuditPageVO}>
     */
    IPage<StarFileAuditPageVO> auditPage(StarFileAuditPageDTO dto);

    /**
     * 获取审核详情
     *
     * @param id ID
     * @return {@link StarFileAuditDetailVO}
     */
    StarFileAuditDetailVO getAuditDetail(Long id);

    /**
     * 审核文件
     *
     * @param dto 入参
     */
    void auditFile(StarFileAuditDTO dto);

    /**
     * 获取分析
     *
     * @param id ID
     * @return {@link StarAnalysisVO}
     */
    StarAnalysisVO getAnalysis(Long id);

    /**
     * 是否已签约
     *
     * @param id ID
     * @return boolean
     */
    boolean isSigning(Long id);

    //-------------------- 以下微信小程序（用户端）接口 --------------------

    /**
     * 保存基本信息-微信小程序（用户端）
     *
     * @param dto    入参
     * @param userId 用户ID
     */
    Long saveBaseInfoWxuser(StarSaveWxuserDTO dto, Long userId);

    /**
     * 更新基本信息-微信小程序（用户端）
     *
     * @param dto    入参
     * @param userId 用户ID
     */
    void updateBaseInfoWxuser(StarUpdateWxuserDTO dto, Long userId);

    /**
     * 获取基础信息-微信小程序（用户端）
     *
     * @param id     ID
     * @param userId 用户ID
     * @return {@link StarBaseInfoWxuserVO}
     */
    StarBaseInfoWxuserVO getBaseInfoWxuser(Long id, Long userId);

    /**
     * 更新自我介绍-微信小程序（用户端）
     *
     * @param dto    入参
     * @param userId 用户ID
     */
    void updateIntroductionWxuser(StarIntroductionUpdateWxuserDTO dto, Long userId);

    /**
     * 获取自我介绍-微信小程序（用户端）
     *
     * @param id     ID
     * @param userId 用户ID
     * @return {@link String}
     */
    String getIntroductionWxuser(Long id, Long userId);

    /**
     * 分页-微信小程序（用户端）
     *
     * @param dto 入参
     * @return {@link IPage}<{@link StarPageWxuserVO}>
     */
    IPage<StarPageWxuserVO> pageWxuser(StarPageWxuserDTO dto);

    /**
     * 获取详情-微信小程序（用户端）
     *
     * @param id     ID
     * @param userId 用户ID
     * @return {@link StarDetailWxuserVO}
     */
    StarDetailWxuserVO getDetailWxuser(Long id, Long userId);

    //-------------------- 以下微信小程序（导师端）接口 --------------------

    /**
     * 获取详情-微信小程序（导师端）
     *
     * @param id     ID
     * @param userId 用户ID
     * @return {@link StarDetailWxmentorVO}
     */
    StarDetailWxmentorVO getDetailWxmentor(Long id, Long userId);

    //-------------------- 以下web接口 --------------------

    /**
     * 取top，按推广，收藏人数来排名
     *
     * @param limit 限制
     * @return {@link List}<{@link StarListVO}>
     */
    List<StarListVO> listWebTop(int limit);

    /**
     * web分页
     *
     * @param dto 入参
     * @return {@link IPage}<{@link StarPageWebVO}>
     */
    IPage<StarPageWebVO> pageWeb(StarPageWebDTO dto);

    /**
     * 获取web详情
     *
     * @param id ID
     * @return {@link StarDetailWebVO}
     */
    StarDetailWebVO getDetailWeb(Long id);

    //-------------------- 以下通用接口 --------------------

    /**
     * 存在-微信小程序（用户端）
     *
     * @param id     ID
     * @param userId 用户ID
     * @return boolean
     */
    boolean exists(Long id, Long userId);

    /**
     * 收藏统计+1
     *
     * @param id        ID
     * @param increment true=+1 false=-1
     */
    void incrementCollectCount(Long id, boolean increment);

    /**
     * 支持统计+1
     *
     * @param id        ID
     * @param increment true=+1 false=-1
     */
    void incrementSupportCount(Long id, boolean increment);

    /**
     * 获取通过用户ID
     *
     * @param userId 用户ID
     * @return {@link Star}
     */
    Star getByUserId(Long userId);
}
